package com.lingchou.cloud.process.api.dto.result;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.time.LocalDateTime;
import java.util.Map;

/**
 * 历史实例统一返回类
 * @author LingChou
 */
@Setter
@Getter
@ToString
@Builder
@ApiModel(value = "HistoricProcessInstanceDTO",description = "历史流程返回类")
public class HistoricProcessInstanceDTO {
    /**
     * 流程运行时的实例ID
     */
    @ApiModelProperty(value = "流程运行时的实例ID")
    private String id;

    /** 
     * 用户提供了对此流程实例的唯一引用。
     */
    @ApiModelProperty(value = "用户提供了对此流程实例的唯一引用")
    private String businessKey;

    /** 
     * 流程定义ID。
     */
    @ApiModelProperty(value = "流程定义ID")
    private String processDefinitionId;

    /** 
     * 流程实例的流程定义的名称。
     */
    @ApiModelProperty(value = "流程实例的流程定义的名称")
    private String processDefinitionName;

    /** 
     * 流程实例的流程定义的关键字。
     */
    @ApiModelProperty(value = "流程实例的流程定义的关键字")
    private String processDefinitionKey;

    /** 
     * 流程实例的流程定义的版本。
     */
    @ApiModelProperty(value = "流程实例的流程定义的版本")
    private Integer processDefinitionVersion;

    /**
     * 流程实例的流程定义的部署标识。
     */
    @ApiModelProperty(value = "流程实例的流程定义的部署标识")
    private String deploymentId;

    /** 
     * 该流程开始的时间.
     */
    @ApiModelProperty(value = "该流程开始的时间")
    private LocalDateTime startTime;

    /** 
     * 该过程结束的时间。
     */
    @ApiModelProperty(value = "该过程结束的时间")
    private LocalDateTime endTime;

    /**
     * 持续时间毫秒数.
     */
    @ApiModelProperty(value = "持续时间毫秒数")
    private Long durationInMillis;

    /**
     * 引用此流程实例结束的活动。请注意，一个流程实例可以有多个结束事件，在这种情况下，可能无法确定在此引用哪个活动ID
     */
    @ApiModelProperty(value = "结束活动ID")
    private String endActivityId;

    /**
     * 启动此流程实例的经过身份验证的用户。
     * setAuthenticatedUserId时所赋的值
     */
    @ApiModelProperty(value = "启动此流程实例的经过身份验证的用户")
    private String startUserId;

    /** 
     * 开始活动ID。
     */
    @ApiModelProperty(value = "开始活动ID")
    private String startActivityId;

    /** 
     * 获取删除流程实例的原因。
     */
    @ApiModelProperty(value = "获取删除流程实例的原因")
    private String deleteReason;

    /**
     * 潜在超级流程实例的流程实例ID；如果不存在超级流程实例，则为null
     */
    @ApiModelProperty(value = "潜在超级流程实例的流程实例ID；如果不存在超级流程实例，则为null")
    private String superProcessInstanceId;

    /**
     * 流程实例的租户标识符。
     */
    @ApiModelProperty(value = "流程实例的租户标识符")
    private String tenantId;

    /**
     * 流程实例的名称。
     */
    @ApiModelProperty(value = "流程实例的名称")
    private String name;

    /**
     * 流程实例的描述。
     */
    @ApiModelProperty(value = "流程实例的描述")
    private String description;

    /**
     * 流程实例的回调ID。
     */
    @ApiModelProperty(value = "流程实例的回调ID")
    private String callbackId;

    /**
     * 流程实例的回调类型。
     */
    @ApiModelProperty(value = "流程实例的回调类型")
    private String callbackType;

    /**
     * 流程实例的参考ID。
     */
    @ApiModelProperty(value = "流程实例的参考ID")
    private String referenceId;

    /**
     * 流程实例的引用类型。
     */
    @ApiModelProperty(value = "流程实例的引用类型")
    private String referenceType;

    /**
     * 返回流程变量
     */
    @ApiModelProperty(value = "返回流程变量")
    private Map<String, Object> processVariables;
}
